﻿using System;
using System.Windows.Forms;
using DirectorioExalmarEntidades;
using DirectorioExalmarLogicaNegocio;
using GlobalesUtilitarios;

namespace appDirectorioExalmarMant
{
    public partial class frmMantenimiento : Form
    {
        private Boolean _bNuevo;

        public frmMantenimiento()
        {
            InitializeComponent();
        }

        private void frmMantenimiento_Load(object sender, EventArgs e)
        {
            dgvDirectorio.AutoGenerateColumns = false;
            CargarCargos();
            CargarAreas();
            CargarSedes();
            CargarEmpleados();
            _bNuevo = false;
        }

        private void CargarEmpleados()
        {
            dgvDirectorio.DataSource = new Empleado().Listar(null);
            Generales.CellFormat(dgvDirectorio);
        }

        private void CargarSedes()
        {
            cboSede.DataSource = new Sede().Listar(null);
            cboSede.ValueMember = "IdSede";
            cboSede.DisplayMember = "Descripcion";
            cboSede.SelectedIndex = -1;
        }

        private void CargarAreas()
        {
            cboArea.DataSource = new Area().Listar(null);
            cboArea.ValueMember = "IdArea";
            cboArea.DisplayMember = "Descripcion";
            cboArea.SelectedIndex = -1;
        }

        private void CargarCargos()
        {
            cboCargo.DataSource = new Cargo().Listar(null);
            cboCargo.ValueMember = "IdCargo";
            cboCargo.DisplayMember = "Descripcion";
            cboCargo.SelectedIndex = -1;
        }

        private void btnConsultar_Click(object sender, EventArgs e)
        {
            var sNombres = String.IsNullOrEmpty(txtNombre.Text) ? null : txtNombre.Text.Trim();
            var sApellidoPaterno = String.IsNullOrEmpty(txtApellidoPaterno.Text) ? null : txtApellidoPaterno.Text.Trim();
            var sApellidoMaterno = String.IsNullOrEmpty(txtApellidoMaterno.Text) ? null : txtApellidoMaterno.Text.Trim();
            var nCargo = (int?)(cboCargo.SelectedIndex == -1 ? null : cboCargo.SelectedValue);
            var nArea = (int?)(cboArea.SelectedIndex == -1 ? null : cboArea.SelectedValue);
            var nSede = (int?)(cboSede.SelectedIndex == -1 ? null : cboSede.SelectedValue);

            if (sNombres == null && sApellidoPaterno == null && sApellidoMaterno == null && !nCargo.HasValue &&
                !nArea.HasValue && !nSede.HasValue)
            {
                CargarEmpleados();
            }
            else
            {
                var oEmpleado = new EmpleadoInfo(null, sNombres, sApellidoPaterno, sApellidoMaterno, nCargo, nArea, nSede);
                dgvDirectorio.DataSource = new Empleado().Listar(oEmpleado);
                Generales.CellFormat(dgvDirectorio);

                cboCargo.SelectedIndex = -1;
                cboArea.SelectedIndex = -1;
                cboSede.SelectedIndex = -1;
            }
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            txtNombre.Text = "";
            txtApellidoPaterno.Text = "";
            txtApellidoMaterno.Text = "";
            txtID.Text = "";
            txtTelFijo.Text = "";
            txtAnexo.Text = "";
            txtCelular1.Text = "";
            txtCelular2.Text = "";
            cboCargo.SelectedIndex = -1;
            cboArea.SelectedIndex = -1;
            cboSede.SelectedIndex = -1;
            txtNombre.Focus();
            dgvDirectorio.Enabled = false;
            _bNuevo = true;
        }

        private void dgvDirectorio_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            var nFila = e.RowIndex;
            if (nFila >= 0 && !_bNuevo)
            {
                SeleccionarFila(nFila);
            }
        }

        private void dgvDirectorio_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            var nFila = e.RowIndex;
            if (nFila >= 0 && !_bNuevo)
            {
                SeleccionarFila(nFila);
            }
        }

        private void SeleccionarFila(int nFila)
        {
            txtID.Text = dgvDirectorio.Rows[nFila].Cells[0].Value.ToString();
            txtNombre.Text = dgvDirectorio.Rows[nFila].Cells[1].Value.ToString();
            txtApellidoPaterno.Text = dgvDirectorio.Rows[nFila].Cells[2].Value.ToString();
            txtApellidoMaterno.Text = dgvDirectorio.Rows[nFila].Cells[3].Value.ToString();
            txtTelFijo.Text = dgvDirectorio.Rows[nFila].Cells[4].Value.ToString();
            txtAnexo.Text = dgvDirectorio.Rows[nFila].Cells[5].Value.ToString();
            txtCelular1.Text = dgvDirectorio.Rows[nFila].Cells[6].Value.ToString();
            txtCelular2.Text = dgvDirectorio.Rows[nFila].Cells[7].Value.ToString();

            cboCargo.SelectedValue = dgvDirectorio.Rows[nFila].Cells[11].Value;
            cboArea.SelectedValue = dgvDirectorio.Rows[nFila].Cells[12].Value;
            cboSede.SelectedValue = dgvDirectorio.Rows[nFila].Cells[13].Value;
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            txtNombre.Text = "";
            txtApellidoPaterno.Text = "";
            txtApellidoMaterno.Text = "";
            txtID.Text = "";
            txtTelFijo.Text = "";
            txtAnexo.Text = "";
            txtCelular1.Text = "";
            txtCelular2.Text = "";
            cboCargo.SelectedIndex = -1;
            cboArea.SelectedIndex = -1;
            cboSede.SelectedIndex = -1;
            txtNombre.Focus();
            dgvDirectorio.Enabled = true;
            _bNuevo = false;
        }

        private void btnGrabar_Click(object sender, EventArgs e)
        {

            int i;
            int? nId = int.TryParse(txtID.Text, out i) ? (int?) i : null;

            var sNombres = String.IsNullOrEmpty(txtNombre.Text) ? null : txtNombre.Text.Trim();
            var sApellidoPaterno = String.IsNullOrEmpty(txtApellidoPaterno.Text) ? null : txtApellidoPaterno.Text.Trim();
            var sApellidoMaterno = String.IsNullOrEmpty(txtApellidoMaterno.Text) ? null : txtApellidoMaterno.Text.Trim();
            var sTelefonoFijo = String.IsNullOrEmpty(txtTelFijo.Text) ? "" : txtTelFijo.Text.Trim();
            var sAnexo = String.IsNullOrEmpty(txtAnexo.Text) ? "" : txtAnexo.Text.Trim();
            var sCelular1 = String.IsNullOrEmpty(txtCelular1.Text) ? "" : txtCelular1.Text.Trim();
            var sCelular2 = String.IsNullOrEmpty(txtCelular2.Text) ? "" : txtCelular2.Text.Trim();
            var nCargo = (int?)(cboCargo.SelectedIndex == -1 ? null : cboCargo.SelectedValue);
            var nArea = (int?)(cboArea.SelectedIndex == -1 ? null : cboArea.SelectedValue);
            var nSede = (int?)(cboSede.SelectedIndex == -1 ? null : cboSede.SelectedValue);

            if (!nId.HasValue && !_bNuevo)
            {
                MessageBox.Show(@"Debe seleccionar un empleado a actualizar", @"Directorio Telefónico", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }

            if (sNombres == null)
            {
                MessageBox.Show(@"Debe ingresar el nombre del empleado", @"Directorio Telefónico", MessageBoxButtons.OK,
                                MessageBoxIcon.Exclamation);
                return;
            }

            if (sApellidoPaterno == null)
            {
                MessageBox.Show(@"Debe ingresar el apellido paterno del empleado", @"Directorio Telefónico", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }

            if (sApellidoMaterno == null)
            {
                MessageBox.Show(@"Debe ingresar el apellido materno del empleado", @"Directorio Telefónico", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }

            if (!nCargo.HasValue)
            {
                MessageBox.Show(@"Debe seleccionar el cargo del empleado", @"Directorio Telefónico", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }
            if (!nArea.HasValue)
            {
                MessageBox.Show(@"Debe seleccionar el área del empleado", @"Directorio Telefónico", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }
            if (!nSede.HasValue)
            {
                MessageBox.Show(@"Debe seleccionar la sede del empleado", @"Directorio Telefónico", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }

            var oEmpleado = new EmpleadoInfo(nId, sNombres, sApellidoPaterno, sApellidoMaterno, nCargo, null, nArea, null, nSede, null, sTelefonoFijo, sAnexo, sCelular1, sCelular2);

            if (_bNuevo)
            {
                if (new Empleado().Registrar(oEmpleado))
                {
                    MessageBox.Show(@"Empleado registrado con éxito", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);

                    dgvDirectorio.DataSource = new Empleado().Listar(null);
                    Generales.CellFormat(dgvDirectorio);
                    cboCargo.SelectedIndex = -1;
                    cboArea.SelectedIndex = -1;
                    cboSede.SelectedIndex = -1;
                    _bNuevo = false;
                    dgvDirectorio.Enabled = true;
                }
                else
                {
                    MessageBox.Show(@"No se pudo registrar al empleado", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                }
            }
            else
            {
                if (new Empleado().Actualizar(oEmpleado))
                {
                    MessageBox.Show(@"Empleado actualizado con éxito", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);

                    dgvDirectorio.DataSource = new Empleado().Listar(null);
                    Generales.CellFormat(dgvDirectorio);
                    cboCargo.SelectedIndex = -1;
                    cboArea.SelectedIndex = -1;
                    cboSede.SelectedIndex = -1;
                    _bNuevo = false;
                    dgvDirectorio.Enabled = true;
                }
                else
                {
                    MessageBox.Show(@"No se pudo actualizar al empleado", @"Directorio Telefónico", MessageBoxButtons.OK,
                    MessageBoxIcon.Exclamation);
                }
            }


        }
    }
}
